package com.test.test.utils.aspect;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;


/**
 * 拦截注解  四种方式  @target @agrs  @annotation @within
 * @author runkeen3
 *
 */
/*@Component
@Aspect*/
public class SecurityAspect {
	/**
	 * //匹配方法标注有AdminOnly的注解的方法
	 * @Pointcut("@annotation(com.imooc.anno.AdminOnly) && within(com.imooc..*)")
	 * //匹配标注有NeedSecured的类底下的方法 //class级别
	 * @Pointcut("@within(com.imooc.anno.NeedSecured) && within(com.imooc..*)")
	 * //匹配标注有NeedSecured的类及其子类的方法 //runtime级别
	 * 在spring context的环境下,二者没有区别
	 * @Pointcut("@target(com.imooc.anno.NeedSecured) && within(com.imooc..*)")
	 * //匹配传入的参数类标注有NeedSecured注解的方法
	 * @Pointcut("@args(com.imooc.anno.NeedSecured) && within(com.imooc..*)")
	 * Created by cat on 2016-12-04.
	 */
	
	
	// 切 有注解  AdminOnly 的方法
	@Pointcut("@annotation(com.test.test.utils.aspect.AdminOnly)&& within(com.test.test.service..*)")
	public void adminOnly(){
		
	}
	 
	// 切 有 类注解  NeedSecured 的方法
	@Pointcut("@within(com.test.test.utils.aspect.NeedSecured)&& within(com.test.test.service..*)")
	public void withinDemo(){
		
	}
	// 切  有 类注解  NeedSecured 的方法
	@Pointcut("@target(com.test.test.utils.aspect.NeedSecured) && within(com.test.test.service..*)")
	public void targetDemo(){
		
	}
	// 切  有 类注解  NeedSecured 的方法
	@Pointcut("@args(com.test.test.utils.aspect.NeedSecured)&& within(com.test.test.service..*)")
	public void argsDemo() {

	}
	@Before("targetDemo()")
	public void before (){
		System.out.println("切 有注解  NeedSecured 的方法");
	}
}
